In computer-based systems, storage resources are typically limited in some aspect. For instance, there may be a limit to the amount of storage space available on a hard disk or other type of persistent, non-volatile storage device. If the amount of data that one wishes to store in this storage space is larger than the size of the storage space, it becomes necessary to decide which data to store within the storage space, whether to compress or otherwise rearrange the data, and/or how to compress or arrange the data.
In some systems, the total amount of storage resources may be sufficient to store all of the available data, however it may be desirable to store some or all of the data in a smaller storage area that provides certain performance benefits when storing the data. For instance, it may be desirable to store as much of the data as possible within a volatile memory area, such as a random access memory (RAM) from which the data may be accessed more quickly than when in a non-volatile storage area. Or, it may be desirable to store as much of the data as possible within a non-volatile storage area that is of a faster speed than other types of storage, such as in a flash memory device as opposed to a traditional hard disk.
Identifying an optimal set of data elements to store within a limited storage space is often left to guesswork by the system administrator. Given an unlimited amount of time, one could methodically compare the performance of a system when storing different combinations of data elements in the desired storage area to identify an optimal combination of data elements to store. However, given the number of data elements to store and the number of options for storing those elements, it is often impractical to test combinations of data elements methodically.
Moreover, when designing a system, an administrator may make decisions regarding how much of certain types of storage areas to include in the system. An administrator typically must guess what size of storage area would be needed, and/or purchase additional resources blindly without knowing if they will have a desired effect on system performance.
The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.